其實,Class 是很生活化的:
當你和朋友走近一家拉麵店,菜單上面有:
麵條粗細,湯頭濃淡,口味有醬油或是豚骨,蔥花海苔要不要增量...之類的。
點完過了一陣子之後,正妹服務生就會將一碗一碗的拉麵端出來。
是正妹服務生?(快存檔!!)
什麼?你說正妹服務生就是Class? 真是孺子可教也(毆飛)
姆丟啦!
在廚房裡煮拉麵的師傅才是類別(Class),
你菜單上寫的選項就是參數(params),
正妹服務生端出來的拉麵就是實體(instance)
現在你應該看得懂下面這段話:
A class can be so much more -- it can hold its state (by keeping track of instance variables) and be duplicated as many times as you want.
當你拿到一隻新的智慧型手機(Class)的時候,通常我們都會想再安裝其他Apps(Module),對吧?
為什麼你會想安裝Apps呢?
當然是因為原生的手機沒有這個功能,或是你下載的Apps有更強大的功能。
這就是Module的概念:用來幫Class擴充方法的工具包,說白一點就是外掛。
現在你應該看得懂下面這段話:
A module will never be anything other than a library of methods.
一句話:
Class(類別)可以繼承也可以被繼承,但是Module(模組)不行
當我們很不幸有同名的類別,又希望他們能執行不同的任務時,
這時候,就可以用module來產生namespace:
#namespace 的用法:各地金城武前來報到
module A
class Cat
def initialize
puts "I come from module A"
end
end
end
module B
class Cat
def initialize
puts "I come from module B"
end
end
end
patty = A::Cat.new # 使用A模組裡面的Cat類別
happy = B::Cat.new # 使用B模組裡面的Cat類別
有兩種做法:
module Flyable
def fly
puts "ButterFly!"
end
end
class Cat
include Flyable
#引入 fly是實體方法
end
class Dog
extend Flyable
#擴充 fly是類別方法
end
kitty = Cat.new
kitty.fly #實體方法
Dog.fly #類別方法
一直下雨好想出去玩啊!!!
鐵人賽我們明天再見囉!
參考資料:
為你自己學 Ruby on Rails
classes-vs-modules
Difference Between Modules And Classes
class-module-mixins